package com.tom.baselibrary.base;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.IdRes;
import androidx.appcompat.app.AppCompatActivity;
import com.tom.baselibrary.ioc.ViewUtils;

/**
 * Added by Tom on 2024/06/25.
 * 整个应用的BaseActivity，使用模板设计模式。
 */
public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 1.设置布局layout；
        setContentView();
        // 1.1 放置特定的算法，子类基本都会用到的。注解的使用
        ViewUtils.inject(this);

        // 2.初始化头部；设计模式构建头部，头部不写在xml中
        initTitle();
        // 3.初始化界面；
        initView();
        // 4.初始化数据.
        initData();
    }

    protected abstract void setContentView();
    protected abstract void initTitle();
    protected abstract void initView();
    protected abstract void initData();

    /**
     * 把通用的代码封装进来。简化调用。
     * 封装启动Activity： startActivity(MainActivity.class);
     * @param clazz
     */
    protected void startActivity(Class<?> clazz) {
        Intent intent = new Intent(this, clazz);
        startActivity(intent);
    }
    /**
     * 简化findViewById，避免每次都 强制类型转换。
     * @return view
     */
    protected <T extends View> T viewById(@IdRes int viewId) {
        return (T) findViewById(viewId);
    }
    // 只能放一些通用的方法，基本上每个Activity都需要使用的方法，如读取数据库readDatabase最好不要放进来。
    // 如果是多个地方要使用，最好使用工具类。因为会影响性能。
}
